'''
【程序69】
题目：有n个人围成一圈，顺序排号。从第一个人开始报数（从1到3报数），凡报到3的人退出
　　　圈子，问最后留下的是原来第几号的那位。
1. 程序分析：
2.程序源代码： 
'''
'''
n = int(input('总人数:'))
num = []
for i in range(1,n+1):
    num.append(i)   #生成n个人的列表,1表存在,0表删除

k = 0    #报数
i = 0    #循环计数
m = 0    #已经被删的编号个数
while m < n - 1:
    if num[i] != 0:   #非0的编号记一次报数
        k += 1
    if k == 3:
        num[i] = 0    #报3的编号置零
        k = 0         #报数也置零
        m += 1        #出现置零就记一次数
        print(num)
    i += 1
    if i == n :       #每一轮报完都给编号置零
        i = 0
i = 0
while num[i] == 0: i += 1
print('留下的人是',i+1,'号')
'''
import matplotlib
from matplotlib import pyplot as plt
def baoshu(s):
    
    for n in range(2,101):
        x.append(n)
        num = []
        for i in range(1,n+1):
            num.append(i)   #生成n个人的列表,1表存在,0表删除

        k = 0    #报数
        i = 0    #循环计数
        m = 0    #已经被删的编号个数
        while m < n - 1:
            if num[i] != 0:   #非0的编号记一次报数
                k += 1
            if k == s:        #规则为报3置零
                num[i] = 0    #报3的编号置零
                k = 0         #报数也置零
                m += 1        #出现置零就记一次数
                #print(num)
            i += 1
            if i == n :       #每一轮报完都给编号置零
                i = 0
        i = 0
        while num[i] == 0:
            i += 1
        y.append(num[i])
        #print('总人数:',n,'留下的人是',i+1,'号')
fig=plt.figure()
for s in range(92,101):
    x = []   #人数
    y = []   #幸存编号
    baoshu(s)
    w = eval(str(33)+str(s-91))
    p_s = fig.add_subplot(w)
    p_s.plot(x,y)
plt.show()
